/*
   Copyright 2020 XiaochengTech

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

package wxpay

import (
	"encoding/xml"
	"errors"
)

// 下载对账单
func (c *Client) DownloadBill(body DownloadBillBody) (wxRsp string, failRsp *DownloadBillResponse, err error) {
	// 业务逻辑
	bytes, err := c.doWeChat("pay/downloadbill", body)
	if err != nil {
		return
	}
	// 解析返回值
	failRsp = new(DownloadBillResponse)
	if e := xml.Unmarshal(bytes, failRsp); e != nil {
		wxRsp = string(bytes)
		return
	} else {
		err = errors.New(failRsp.ReturnMsg)
		return
	}
}

// 下载对账单的参数
type DownloadBillBody struct {
	SignType string `json:"sign_type,omitempty"` // 签名类型，目前支持HMAC-SHA256和MD5，默认为MD5
	BillDate string `json:"bill_date"`           // 下载对账单的日期，格式：20140603
	BillType string `json:"bill_type,omitempty"` // ALL，返回当日所有订单信息，默认值 SUCCESS，返回当日成功支付的订单 REFUND，返回当日退款订单 RECHARGE_REFUND，返回当日充值退款订单
	TarType  string `json:"tar_type,omitempty"`  // 非必传参数，固定值：GZIP，返回格式为.gzip的压缩包账单。不传则默认为数据流形式。
}

// 下载对账单的返回值
type DownloadBillResponse struct {
	ResponseModel
	ErrCode string `xml:"err_code"` // TODO 失败错误码，详见错误码列表
}
